package com.alcj.common.framework;

import java.lang.reflect.Field;

import com.alcj.common.utils.CmnUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * <b>功能：通用公共控制类</b><br>
 * <br>
 * <b>创建日期：</b> 2016年4月5日 上午10:52:05 <br>
 * 
 * @author chen<br>
 * @version 1.0
 */
public class PageController {

	protected Logger logger = LoggerFactory.getLogger(getClass());
	private static final Integer DEFAULT_SIZE = 10;
	private Integer recordNum; // 总条数
	private Integer currentPage; // 当前页数
	private Integer maxSize = 10; // 最大记录数
	private Integer pageNum = 0; // 总页数
	private Integer startRowNum; // 开始行数
	private Integer endRowNum; // 结束行数

	/**
	 * <b>功能：根据记录条数，计算总页数</b>
	 * 
	 * @Author:guokb , 2016年4月11日
	 * @param num
	 *            void
	 */
	protected void giveTotalNum(final Integer num) {
		this.recordNum = num;
		if (this.maxSize < 1) {
			this.maxSize = DEFAULT_SIZE;
		}
		this.pageNum = num / this.maxSize;
		if ((num % this.maxSize) != 0) {
			this.pageNum += 1;
		}
	}

	/**
	 * <b>功能：设置分页参数</b>
	 * 
	 * @Author:guokb , 2016年4月11日
	 * @param object
	 * @throws Exception
	 *             void
	 */
	public void preparePageParams(Object object) throws Exception {
		// 判断当前页数是否大于总页数
		if (this.currentPage > pageNum) {
			currentPage = pageNum;
		}
		// 计算开始行数
		startRowNum = (currentPage - 1) * maxSize;
		// 判断开始行数
		if (startRowNum < 0)
			startRowNum = 0;
		// 计算结束行数
		endRowNum = currentPage * maxSize + 1;
		// 赋值给实体类
		Class<?> superClazz = object.getClass().getSuperclass();
		Field startField = superClazz.getDeclaredField("startRowNum");
		Field endField = superClazz.getDeclaredField("endRowNum");
		Field sizeField = superClazz.getDeclaredField("maxSize");
		startField.setInt(object, startRowNum);
		endField.setInt(object, endRowNum);
		sizeField.setInt(object, maxSize);

	}
	// getter and setter methods
	public Integer getCurrentPage() {
		if (CmnUtil.isEmpty(currentPage))
			currentPage = 1;
		return currentPage;
	}

	public void setCurrentPage(Integer currentPage) {
		if (currentPage < 1) {
			currentPage = 1;
		}
		this.currentPage = currentPage;
	}

	/**
	 * <b>功能：获取分页对象</b>
	 *
	 * @Author:guokb , 2016年4月11日
	 * @return Pager
	 */
	public Pager getPage() {
		return new Pager(this.getMaxSize(), this.getPageNum(), this.getRecordNum(), this.getCurrentPage());
	}

	public Integer getRecordNum() {
		return recordNum;
	}

	public void setRecordNum(Integer recordNum) {
		this.recordNum = recordNum;
	}

	public Integer getMaxSize() {
		return maxSize;
	}

	public void setMaxSize(Integer maxSize) {
		this.maxSize = maxSize;
	}

	public Integer getPageNum() {
		return pageNum;
	}

	public void setPageNum(Integer pageNum) {
		this.pageNum = pageNum;
	}

	public Integer getStartRowNum() {
		return startRowNum;
	}

	public void setStartRowNum(Integer startRowNum) {
		this.startRowNum = startRowNum;
	}

	public Integer getEndRowNum() {
		return endRowNum;
	}

	public void setEndRowNum(Integer endRowNum) {
		this.endRowNum = endRowNum;
	}

}
